import re
from typing import List, Optional

from .logger import get_logger
logger = get_logger(__name__)

def extract_urls(text: str) -> List[str]:
    """
    从文本中提取所有以http://或https://开头的URL地址

    Args:
        text (str): 包含URL的文本

    Returns:
        List[str]: 提取到的URL列表
    """
    if not text or not isinstance(text, str):
        logger.warning("无效的输入文本，无法提取URL")
        return []

    # 正则表达式模式：匹配以http://或https://开头的URL
    # 模式解释：
    # https?:// 匹配http://或https://
    # [^\s]+ 匹配除空白字符外的任意字符，一次或多次
    url_pattern = r'https?://[\x21-\x7E]+'

    try:
        # 查找所有匹配的URL
        urls = re.findall(url_pattern, text)

        # 移除URL末尾可能的标点符号
        cleaned_urls = []
        for url in urls:
            # 移除末尾的标点符号（如果有）
            while url and url[-1] in ',.!?;:\'"()[]{}|':
                url = url[:-1]
            cleaned_urls.append(url)

        logger.info(f"从文本中提取到 {len(cleaned_urls)} 个URL")
        return cleaned_urls
    except Exception as e:
        logger.error(f"提取URL时发生错误: {str(e)}")
        return []


def validate_url(url: str) -> bool:
    """
    验证一个字符串是否是有效的URL

    Args:
        url (str): 要验证的字符串

    Returns:
        bool: 如果是有效的URL则返回True，否则返回False
    """
    if not url or not isinstance(url, str):
        return False

    # 简单验证：检查是否以http://或https://开头，并通过正则表达式匹配
    url_pattern = r'^https?://[^\s]+$'
    return bool(re.match(url_pattern, url))


